;4) programa,atimanti du beveik neriboto ilgio sk
;programa turi paprasyti ivesti du teigiamus,bet kokio ilgio sesioliktainius sk
;(sakykim neilgesnius nei 255)
;ir isspausdinti ju suma
;-------------
;jei antras > pirma, leisti genneruoti klaida

.model small
.Stack 100h
.Data
  op1 db 256 dup(0),'$'
  op2 db 256 dup(0),'$'
  ats db 256 dup('0'), '$'
  eil1 db '1-as operandas: $'
  eil2 db '2-as operandas: $'
  eil3 db 'Atsakymas: $'
  nauja_eil db 13,10,'$'
.Code
 
ivesti proc
    mov cl, 10h
    xor bx, bx;
    iv_cikl:
      mov ah, 01h
      int 21h
      cmp al, 0dh
      je iv_baigti
      mov dl, al
      xor ah, ah
      div cl
      cmp dl, 3ah
      jl iv_toliau
      add ah, 09h
     iv_toliau:
      inc bl
      mov [si][bx], ah
      cmp bl, 0ffh
    jb iv_cikl
   iv_baigti:
    mov [si], bl
    lea dx, nauja_eil
    call irasyti
    ret
  endp ivesti
  
irasyti proc
    mov ah, 09h
    int 21h
    ret
  endp irasyti
  
atimti proc
    xor bx, bx
    mov dl, op1
    lyginti:
      cmp op1, bl
      je at_toliau
      cmp dl, op2[bx]
      jne at_toliau
      inc bl
      mov dl, op1[bx]
    jmp lyginti
   at_toliau:
    cmp dl, op2[bx]
    jb at_sukeisti
    xor dl, dl
    lea si, op1
    lea di, op2
    jmp at_atimti
   at_sukeisti:
    mov dl, '-'
    lea si, op2
    lea di, op1
   at_atimti:
    xor bh, bh
    mov bl, [si]
    add si, bx
    mov ch, bl
    mov bl, [di]
    add di, bx
    mov dh, bl
    xor cl, cl
    xor ah, ah
    mov bx, 00ffh
    at_cikl:
      cmp ch, cl
      je at_4
      mov al, [si]
      add al, ah
      cmp dh, cl
      jbe at_1
      sub al, [di]
      dec di
     at_1:
      cbw
      cmp ah, 00h
      je at_2
      add al, 10h
     at_2:
      cmp al, 0ah
      jb at_3
      add al, 07h
     at_3:
      add ats[bx], al
      dec bl
      dec si
      inc cl
    jmp at_cikl
   at_4:
      cmp ats[bx], '0'
      jne at_5
      cmp bx, 00ffh
      je at_6
      inc bx
    jmp at_4
   at_5:
    cmp dl, '-'
    jne at_6
    dec bx
    mov ats[bx], dl
   at_6:
    lea cx, ats[bx]
    ret
  endp atimti
  pradzia:
    mov ax, @data
    mov ds, ax
    lea dx, eil1
    call irasyti
    lea si, op1
    call ivesti
    lea dx, eil2
    call irasyti
    lea si, op2
    call ivesti
    call atimti
    lea dx, eil3
    call irasyti
    mov dx, cx
    call irasyti
    mov ah, 4ch
    int 21h
  end pradzia

